iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 6
3
Big Data

30天之你好MongoDB系列 第 6 篇

30-6之新手村CRUD---更新之陣列欄位攻略

  • 分享至 

  • xImage
  •  

黑色好看版 - 傳送門


本篇文章將要說明陣列修改器$push,主要就是針對document中的陣列進行修改,同時他也可以搭配$each、$slice、$ne、$addToSet、$pop、$pull來使用。

  • 陣列更新修改器攻略

呼好多……

~ 陣列更新修改器攻略 ~


$push

$push是陣列修改器,假如一個document中已經有陣列的結構,使用push會在陣列的尾末加入一個新元素,要是本來就沒有這個陣列,則會自動新建一筆。

使用方法如下範例,首先先新增一筆資料,然後新增加一個叫jack的fans。

	db.user.insert({
		"name" : "mark",
		"fans" : ["steven","crisis","stanly"]
	})
	db.user.update({"name":"mark"},
		{$push:{"fans" : "jack"}
	})

結果如下圖。

$each

$push一次新增只能新增一筆元素,而搭配$each就可以新增多筆。

使用方法如下範例,一樣首先新增一筆資料,然後這時我們一次新增三個fans分別為jack、landry、max。

	db.user.insert({
		"name" : "mark",
		"fans" : ["steven","crisis","stanly"]
	})

	db.user.update({"name":"mark"},
		{"$push" : {"fans" : {"$each" : ["jack","lnadry","max"]}}}
	)

結果如下圖

$slice

如果你希望限制一個陣列的大小,就算多push進元素,也不要超過限制大小,這時你就可以用$slice,不過注意它是保留最後n個元素。

使用方法如下範例,新增一筆資料,然後我們希望fans人數不超過5人,但我們硬多塞一個人進去。

	db.user.insert({
		"name" : "mark",
		"fans" : ["steven","crisis","stanly"]
	})

	db.user.update({"name":"mark"},
		{"$push" : {"fans" : 
			{"$each" : ["jack","lnadry","max"],
			 "$slice" : -5 }}}
	)

執行結果如下,可以看到第一位steven被刪除,只保留了最後5位。

$addToSet

你可能有這個需求,假設你要新增一個元素到陣列裡,並且保證陣列內的元素不會重複,這時就可以使用$addToSet。

使用方法如下範例,新增一筆資料,然後fans有steven、landry、stanly,這時我們在新增steven和jack進去,預期應該steven不會被新增進去,也就是不會產生兩個steven。

	db.user.insert({
		"name" : "mark",
		"fans" : ["steven","crisis","stanly"]
	})
	
		db.user.update({"name":"mark"},
		{"$addToSet" : {"fans" : 
			{"$each" : ["steven","jack"] }}}
	)

執行結果如下,符合預期。

$pop與$pull

$pop與$pull這兩個修改器都是用來刪除元素用的,$pop可以從頭或尾刪除,而$pull則是基於特定條件來刪除。

先來看看$pop的使用範例。其中"fans":1代表從fans陣列尾刪除"fans":-1則從陣列頭刪除。

	db.user.insert({
		"name" : "mark",
		"fans" : ["steven","crisis","stanly"]
	})
	
	db.user.update({"name":"mark"},
		{"$pop" : {"fans":1}}
	)

下圖為執行結果。

這時我們在來看看$pull用法,假設我們要將crisis這fans刪除,使用方法如下。

	db.user.insert({
		"name" : "mark",
		"fans" : ["steven","crisis","stanly"]
	})
	
	db.user.update({"name":"mark"},
		{"$pull" : {"fans":"crisis"}}
	)

執行結果如下圖

~ 結語 ~


今天說了不少個修改器簡單的進行總結一下。

  • 要將元素丟進陣列時可用$push。
  • 要將『多個』元素丟進陣列時可搭配$each。
  • 要限制陣列大小時請用$slice。
  • 要保證陣列內容不重複請用$addToSet。
  • 要刪除陣列元素請用$pop和$pull。

結束……又快要燒起來的fu,+u^6。

~ 參考資料 ~



上一篇
30-5之新手村CRUD---更新
下一篇
30-7之新手村CRUD---刪除
系列文
30天之你好MongoDB 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言